import socket

server = socket.socket()
server.setblocking(False)
server.bind(('', 9000))
server.listen(5)

all_connection = []
while True:
    # 生成对等套接字
    try:
        connection, raddr = server.accept()
        connection.setblocking(False) # 新生成的套接字 设置非阻塞
        all_connection.append(connection)
    except BlockingIOError:
        pass

    tmp_list = [connection for connection in all_connection] # 浅复制 对某一个列表的修改不会影响另一个列表

    for connection in tmp_list:
        try:
            recv_data = connection.recv(1024)
            if recv_data:
                print(recv_data)
                connection.send(recv_data)
            else:
                connection.close()
                all_connection.remove(connection) # 不能在迭代一个列表的时候再去修改一个列表
        except BlockingIOError:
            pass